﻿using System;
using System.Collections.Generic;
using System.IO;
using csvm.contracts.components.Metadaten;
using csvm.contracts.datamodel;

namespace csvm.metadatenrepo
{
    public class MetadatensätzeSchreiben : IMetadatensätzeSchreiben
    {
       private String _metadatendateiName;

        public void In_Initialisieren(string metadatenDateiname)
        {
            _metadatendateiName = metadatenDateiname;
        }

        public void In_Schreiben(IEnumerable<Metadatensatz> metadatensätze)
        {
            var  metadatenStream = File.OpenWrite(_metadatendateiName);
            metadatenStream.Seek(0, SeekOrigin.End);
            var count = 0;
            foreach (var metadatensatz in metadatensätze)
            {
                count++;
                var datensatzNumberByteArray = BitConverter.GetBytes(metadatensatz.Datensatznummer);
                WriteByteArrayToFileStream(datensatzNumberByteArray, metadatenStream);

                var datensatzPositionByteArray = BitConverter.GetBytes(metadatensatz.Datensatzposition);
                WriteByteArrayToFileStream(datensatzPositionByteArray, metadatenStream);

                var datensatzlängeByteArray = BitConverter.GetBytes(metadatensatz.Datensatzlänge);
                WriteByteArrayToFileStream(datensatzlängeByteArray, metadatenStream);
            }
            metadatenStream.Close();
            Out_AnzahlDatensätzeGeschrieben(count);
            
        }

        public event Action<long> Out_AnzahlDatensätzeGeschrieben;

        private void WriteByteArrayToFileStream (byte[] byteArray, Stream fileStream)
        {
            fileStream.Write(byteArray, 0, byteArray.Length);
        }
    }
}
